<?php
namespace Home\Controller;
use Think\Controller;

class UploadifyController extends Controller{
	public function index(){
		$this->display();
	}
	
	public function upload(){
        //静态配置
        $config = array(
        'mimes'         =>  array(), //允许上传的文件MiMe类型
        'maxSize'       =>  5*1024*10240, //上传的文件大小限制 (0-不做限制)
        'exts'          =>  array('jpg','gif','png','jpeg','zip','rar','tar','gz','7z','doc','docx','txt','xml'), //允许上传的文件后缀
        'autoSub'       =>  true, //自动子目录保存文件
        'subName'       =>  array('date', 'Y-m-d'), //子目录创建方式，[0]-函数名，[1]-参数，多个参数使用数组
        'rootPath'      =>  './Uploads/', //保存根路径 默认值'./Uploads' index.php主入口文件下的uploads下
        'savePath'      =>  '/Picture/', //保存路径 默认为 '' 相对于rootPath
/*
配置1： 'savePath'      =>  '/Picture/', 
结果1：'savepath' => '/Picture/2014-10-17/',
配置2：'savePath'      =>  './Picture', 
结果2：'savepath' => './Picture2014-10-17/',
总结：savePath只是简单的拼接，并没有做处理，所以设置时务必采用'/Picture/'这种格式
 */
        'saveName'      =>  array('uniqid', ''), //上传文件命名规则，[0]-函数名，[1]-参数，多个参数使用数组
        'saveExt'       =>  '', //文件保存后缀，空则使用原后缀
        'replace'       =>  false, //存在同名是否覆盖
        'hash'          =>  true, //是否生成hash编码
        'callback'      =>  false, //检测文件是否存在回调，如果存在返回文件信息数组
        //todo 下面两项一般在实例化upload时设置 new Upload($setting, $driver='Local', $driverConfig);
        'driver'        =>  'Local', // 文件上传驱动 
        'driverConfig'  =>  array(), // 上传驱动配置  
        );
        //注意也可以动态配置  如下：
        //$upload->maxSize = 500000; // 设置附件上传大小
        //$upload->rootPath = './Uploads'; 
        //$upload->savePath = '/Picture/'; // 设置附件上传目录

        //标准返回数据
        $return  = array('status' => 1, 'info' => '上传成功', 'data' => '');

        if (!empty($_FILES)) {
            $upload = new \Think\Upload($config,$config['driver'],$config['driverConfig']); // 实例化上传类
            if (!$info = $upload->upload()) {
//echo var_export($info,true);
//exit;
/* result of $info:
array (
    //注意： 'Filedata' 是uploadify上传插件初始化时设置的 fileObjName   : 'Filedata'  默认值就是 'Filedata'  不建议自定义，一旦自定义别忘了在后面使用时用自定义的字段
  'Filedata' => 
  array (
    'name' => 'IMG_0557.JPG',
    'type' => 'application/octet-stream',
    'size' => 40711,
    'key' => 'Filedata',
    'ext' => 'JPG',
    'md5' => '6b53c61aced4815d4b81d1b3429a2080',
    'sha1' => '99957ba8a30d2ad2310ad35ed5f5b0afe58efc8b',
    'savename' => '54411fa153aff.JPG',
    'savepath' => '/Picture/2014-10-17/',
  ),
)
 */

                $return['status'] = 0;
				$return['info'] = $upload->getError();
			    echo json_encode($return); exit;
            } else {
                
                // 上传成功 获取上传文件信息
                //从rootPath得到上传根路径 :如'/Upload' 是由 'rootPath' => './Uploads/', 得到的
                $rootPath = rtrim(ltrim($config['rootPath'],'.'),'/'); //result: '/Upload'
                $savePath = ltrim($info['Filedata']['savepath'].$info['Filedata']['savename'],'.'); //result: '/Picture/2014-10-17/54978e1adbbda.jpg'
                $path = $rootPath.$savePath;
                //状态信息
                $return['status'] = 1;
				$return['info'] = '上传成功';
                $return['data'] = array(
                    'name'=> $info['Filedata']['name'],
                    'savename'=> $info['Filedata']['savename'],
                    'savepath'=> $info['Filedata']['savepath'],
                    'path'    => $path
                    //'path'=> $rootPath.$savepath,//数组内不能执行连接运算
                );
                echo json_encode($return); exit;
            }
        }
	}

}
